package org.znxs.znagent_s.rag.tools;

import cn.hutool.json.JSONUtil;
import lombok.Data;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * bing 搜索图片 Tool
 */
public class BingSearchImgTool {

    @Tool(description = "从网站上搜索图片url，例如bing")
    public String searchImage(@ToolParam(description = "图片搜索关键词") String imgDes) {
        // 这里直接从bing里面获取
        String url = String.format("https://cn.bing.com/images/search?q=%s", imgDes);
        // 使用jsoup工具类
        Document document;
        try {
            // 拿到获取的html页面
            document = Jsoup.connect(url).get();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        // 拿到整个页面，直接根据css样式获取指定内容  这里拿到的是所有搜索图像的集合
        Elements imgList = document.select(".iuscp.isv");
        record Img(String imgLink, String title) {
        }
        List<String> imgResList = new ArrayList<>();
        for (Element element : imgList) {
            // 获取图像所在div 元素
            String imgDiv = element.select(".iusc").get(0).attr("m");
            Map<String, Object> map = JSONUtil.toBean(imgDiv, Map.class);
            // 从图像div中获取图像和标题
            String imgLink = (String) map.get("murl");
            String title = (String) map.get("t");
            Img img = new Img(imgLink, title);
            imgResList.add(img.toString());
        }

        return String.join("\n", imgResList);
    }
}